import axios from "axios";

//是否本地环境
let isLocal = true

// 请求域名/地址
let http = 'https://unicoder.zippro.cn';

/**
 * 获取online_file的文件
 * @returns {*}
 */
export function getOptions() {
    return axios({
        method: 'post',
        contentType: "application/json",
        url: http + '/youyaboot-admin/magical_lowcode/openapi/db30e356274741ad84b4a2b1e679315d/select-file-all'
    })
}

/**
 * 根据ID查询主表信息
 * @param data
 */
export function getDataById(data) {
    return axios({
        method: 'post',
        contentType: "application/json",
        url: http + '/youyaboot-admin/magical_lowcode/openapi/db30e356274741ad84b4a2b1e679315d/getDataById',
        data: data
    })
}

/**
 * 获取项目的JDBC下所有的库
 */
export function getLocalHostDB() {
    return axios({
        method: 'post',
        contentType: "application/json",
        url: http + '/youyaboot-admin/magical_lowcode/openapi/db30e356274741ad84b4a2b1e679315d/getLocalhost-db'
    })
}

/**
 * 获取选中库的所有的表
 */
export function getTableList(dbName) {
    return axios({
        method: 'post',
        contentType: "application/json",
        url: http + '/youyaboot-admin/magical_lowcode/openapi/db30e356274741ad84b4a2b1e679315d/getTables',
        data: {dbName: dbName}
    })
}

/**
 * 通过 operateType = 1（选择库、选择表、选择数据条数） 的方式导入数据
 * @param data
 */
export function getTableDataByType1(data) {
    return axios({
        method: 'post',
        contentType: "application/json",
        url: http + '/youyaboot-admin/magical_lowcode/openapi/db30e356274741ad84b4a2b1e679315d/getColumns-data',
        data: data
    })
}

/**
 * 通过 operateType = 2（自定义SQL） 的方式导入数据
 * @param data
 */
export function getTableDataByType2(data) {
    return axios({
        method: 'post',
        contentType: "application/json",
        url: http + '/youyaboot-admin/magical_lowcode/openapi/db30e356274741ad84b4a2b1e679315d/getData-dowSql',
        data: data
    })
}

/**
 * 根据主表ID查询对应的sheet页
 * @param data
 */
export function getOnlineFileItem(data) {
    return axios({
        method: 'post',
        contentType: "application/json",
        url: http + "/youyaboot-admin/magical_lowcode/openapi/db30e356274741ad84b4a2b1e679315d/select-data-onlineFileId",
        data: data
    })
}

/**
 * 单个sheet页更新
 * @param data
 * @returns {*}
 */
export function upSheetOne(data) {
    return axios({
        method: 'post',
        contentType: "application/json",
        url: http + "/youyaboot-admin/magical_lowcode/openapi/db30e356274741ad84b4a2b1e679315d/up-sheet-data",
        data: data
    })
}

/**
 * 整个工作薄更新
 * @param data
 */
export function upWorkTotal(data) {
    return axios({
        method: 'post',
        contentType: "application/json",
        url: http + "/youyaboot-admin/magical_lowcode/openapi/db30e356274741ad84b4a2b1e679315d/up-work",
        data: data
    })
}

/**
 * 根据online_file的id查询子表信息
 * @param data
 */
export function getOnlineFileItemByid(data) {
    return axios({
        method: 'post',
        contentType: "application/json",
        url: http + "/youyaboot-admin/magical_lowcode/openapi/db30e356274741ad84b4a2b1e679315d/select-data-onlineFileId",
        data: data
    })
}

/**
 * 文件存储
 * @param data
 */
export function saveFile(data) {
    return axios({
        method: 'post',
        contentType: "application/json",
        url: http + '/youyaboot-admin/magical_lowcode/openapi/db30e356274741ad84b4a2b1e679315d/save-file',
        data: data
    })
}

/**
 * 数据反存储到数据库
 * @param data
 */
export function dataFeedback(data) {
    return axios({
        method: 'post',
        contentType: "application/json",
        url: http + '/youyaboot-admin/magical_lowcode/openapi/db30e356274741ad84b4a2b1e679315d/data-feedback',
        data: data
    })
}

/**
 * 自定义sql形式将数据倒推回数据库
 * @param data
 */
export function sqlFeedback(data) {
    return axios({
        method: 'post',
        contentType: "application/json",
        url: http + '/youyaboot-admin/magical_lowcode/openapi/db30e356274741ad84b4a2b1e679315d/sql-feedback',
        data: data
    })
}

/**
 * 根据配置信息存储样式
 * @param data
 * @returns {*}
 */
export function saveStyleByQuery(data) {
    return axios({
        method: 'post',
        contentType: "application/json",
        url: http + '/youyaboot-admin/magical_lowcode/openapi/db30e356274741ad84b4a2b1e679315d/saveStyleByQuery',
        data: data
    })
}

/**
 * 根据配置信息获取额外存储过的样式
 * @param data
 * @returns {*}
 */
export function getStyleByQuery(data) {
    return axios({
        method: 'post',
        contentType: "application/json",
        url: http + '/youyaboot-admin/magical_lowcode/openapi/db30e356274741ad84b4a2b1e679315d/getStyleByQuery',
        data: data
    })
}

/**
 * 远程API方式获取数据
 * @param method
 * @param url
 * @param data
 * @returns {*}
 */
export function getDataByApiUrl(method, url, data) {
    return axios({
        method: method,
        contentType: "application/json",
        url: http + url,
        data: data
    })
}

/**
 * 远程API方式上传数据
 * @param method
 * @param url
 * @param data
 * @returns {*}
 */
export function uploadByApi(method, url, data) {
    return axios({
        method: method,
        contentType: "application/json",
        url: http + url,
        data: data
    })
}


/**
 * 下划线转驼峰写法
 * @param str
 * @returns {*}
 */
export function convertToCamelCase(str) {
    return str.replace(/\_(\w)/g, function (match, p1) {
        return p1.toUpperCase();
    });
}

/**
 * 获取当前日期 时分秒
 * @param date
 * @returns {string}
 */
export function formatDate(date) {
    let year = date.getFullYear();
    let month = (date.getMonth() + 1).toString().padStart(2, '0');
    let day = date.getDate().toString().padStart(2, '0');
    let hours = date.getHours().toString().padStart(2, '0');
    let minutes = date.getMinutes().toString().padStart(2, '0');
    let seconds = date.getSeconds().toString().padStart(2, '0');
    return `${year}${month}${day}${hours}${minutes}${seconds}`;
}

/**
 * 拉表字段注释的模式 数据做处理
 * @param columns     表列数据
 * @param tableData   表行数据
 */
export function dataToDataByComment(columns, tableData) {
    let keys = [];
    columns.forEach(co => {
        if (co.text === "") {
            keys.push(co.name);
        } else {
            keys.push(co.text);
        }
    })
    let list = [];
    tableData.forEach(d => {
        let filds = Object.keys(d);
        let a = {};
        filds.forEach(f => {
            columns.forEach(item => {
                let b = convertToCamelCase(item.name)
                if (f === b) {
                    if (item.text === "") {
                        a[f] = d[f];
                    } else {
                        a[item.text] = d[f];
                    }
                }
            })
        })
        list.push(a);
    })
    return {
        keys: keys,
        data: list
    };
}

/**
 * 将数据转换为lucksheet的数据格式 该模式是第一次加载这个表 数据库中没有存储过 单元格样式全部走默认
 * @param columns     表列数据
 * @param tableData   表行数据
 */
export function dataToLucksheetModel1(columns, tableData) {
    let lucksheetData = [];
    // 表列数据做表头
    let column = [];
    columns.forEach(res => {
        let item = {
            "v": res,
            "ct": {"fa": "General", "t": "n"},
            "bg": "#f6b26b",
            "ff": 4,
            "bl": 1,
            "tb": 2,
            "m": res
        }
        column.push(item);
    })
    lucksheetData.push(column);
    // 行数据转换
    tableData.forEach(item => {
        let data = [];
        JSON.parse(JSON.stringify(columns)).forEach(el => {
            let fild = convertToCamelCase(el)
            let ob = {
                "v": item[fild],
                "ct": {"fa": "General", "t": "n"},
                "tb": 2,
                "ff": 4,
                "m": item[fild]
            }
            data.push(ob)
        })
        lucksheetData.push(data);
    })
    return lucksheetData;
}

/**
 * 将数据转换为lucksheet的数据格式 该模式是在online_file中存储过一次该表的样式，这里引用存过的样式，做数据覆盖
 * @param tableData 经过model1处理过的表数据
 * @param data 数据库存储过的单元格样式
 */
export function datatoLucksheetModel2(tableData, data) {
    let newData = JSON.parse(data);
    tableData.forEach((item, index) => {
        for (let i = 0; i < item.length; i++) {
            let ob = newData[index];
            if (ob) {
                let obj = ob[i];
                if (obj) {
                    obj.m = 'm' in item[i] ? item[i].m : "";
                    obj.v = 'v' in item[i] ? item[i].v : "";
                    item[i] = obj;
                }
            }
        }
    })
    return tableData;
}

/**
 * lucksheet数据转换为要存数据库的对象 模式1 全字段转换
 * @param lucksheetData
 */
export function lucksheetToDataModelOne(lucksheetData) {
    // 最后组成的数组
    let data = [];
    // 复制一份数据出来 不影响原本的
    let luckyData = JSON.parse(JSON.stringify(lucksheetData));
    // 获取表字段
    let columnData = luckyData.splice(0, 1);
    // 抽取表字段每一个单元格的具体内容
    let columns = [];
    columnData[0].forEach(co => {
        if (co && "m" in co) {
            columns.push(co.m);
        }
    })
    // 编辑成该表对象
    // 编辑每一行的对象
    luckyData.forEach(lu => {
        // 每一行依然是个数组
        let item = {};
        for (let i = 0; i < lu.length; i++) {
            // 转驼峰
            let column = convertToCamelCase(columns[i]);
            item[column] = lu[i] != null && 'm' in lu[i] ? lu[i].m : "";
            if (!item[column]) {
                item[column] = lu[i] != null && 's' in lu[i].ct ? lu[i].ct.s[0].v : "";
            }
        }
        data.push(item);
    })
    return data;
}

// 过滤空单元格版本
// export function lucksheetToDataModelOne(lucksheetData) {
//     // 最后组成的数组
//     let data = [];
//     // 复制一份数据出来 不影响原本的
//     let luckyData = JSON.parse(JSON.stringify(lucksheetData));
//     // 获取表字段
//     let columnData = luckyData.splice(0, 1);
//     // 抽取表字段每一个单元格的具体内容
//     let columns = [];
//     columnData[0].forEach(co => {
//         if (co && "m" in co) {
//             columns.push(co.m);
//         }
//     })
//     // 编辑成该表对象
//     // 编辑每一行的对象
//     luckyData.forEach(lu => {
//         // 每一行依然是个数组
//         let item = {};
//         for (let i = 0; i < lu.length; i++) {
//             if (lu[i]) {
//                 // 转驼峰
//                 let column = convertToCamelCase(columns[i]);
//                 if ('m' in lu[i] && lu[i].m) {
//                     item[column] = lu[i].m;
//                 }
//                 if (!item[column]) {
//                     if ('s' in lu[i].ct) {
//                         item[column] = lu[i].ct.s[0].v;
//                     }
//                 }
//             }
//         }
//         data.push(item);
//     })
//     return data;
// }


/**
 * lucksheet数据转换为要存数据库的对象 模式2 根据选择的字段转换 将模式一转换好的数据根据要上传的字段做处理
 * @param tableData
 * @param filds
 */
export function lucksheetToDataModelTwo(tableData, filds) {
    // 最后组成的数组
    let data = [];
    tableData.forEach(td => {
        let item = {};
        filds.forEach(f => {
            item[f] = td[f];
        })
        data.push(item);
    })
    return data;
}

/**
 * 下拉的数据是表的字段注释，上传的时候需要将注释转成字段
 * @param list
 * @param keys
 */
export function luckysheetToDataModelThree(list, keys) {
    // 最后组成的数组
    let data = [];
    list.forEach(d => {
        let filds = Object.keys(d);
        let a = {};
        filds.forEach(f => {
            keys.forEach(item => {
                if (f === item.text) {
                    let fild = convertToCamelCase(item.name);
                    a[fild] = d[f];
                } else if (f === item.name) {
                    a[f] = d[f];
                }
            })
        })
        data.push(a);
    })
    return data;
}
